One or more aspects relate, in general, to processing within a computing environment, and in particular, to processing associated with sibling calls.
Sibling calls (also referred to as sibcalls) are calls to routines, such as functions or subroutines, performed at the end of a calling routine. When a caller makes a sibling call, the caller is not expecting the called routine to return to the caller. A calling routine and the called routine may be the same routine. When this occurs, the call may be referred to as a tailcall. The term, sibcall and derivations thereof, as used herein, include tailcalls and derivations thereof.
Detecting and implementing sibling calls offer an opportunity to improve code performance. However, today, in many environments, the effectiveness of sibcalls is limited by the restriction that sibcalls are to be made only to local callees. When a sibcaller (i.e., the function calling its sibling routine) has been called locally, the original call may not have generated enough information to perform a return from an external function. Since it is not known whether the sibcaller will be called using a local or extern call, the compiler may not generate sibcalls to any extern symbol.